package com.tiancheng.trade.payment.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.tiancheng.trade.commom.core.data.PageInfo;
import com.tiancheng.trade.commom.core.data.Result;
import com.tiancheng.trade.payment.channel.bo.GetUnifiedOrderResBO;
import com.tiancheng.trade.payment.channel.ums.params.UmsQrcNotifyResult;
import com.tiancheng.trade.payment.model.QrFlow;
import com.tiancheng.trade.payment.vo.admin.QrFlowQueryVo;
import com.tiancheng.trade.payment.vo.admin.res.QrFlowDetailQueryResVO;
import com.tiancheng.trade.payment.vo.admin.res.QrFlowQueryResVO;
import com.tiancheng.trade.payment.vo.api.*;
import com.tiancheng.trade.commom.web.model.response.UnifiedOrderResVO;

import java.io.IOException;
import java.util.Map;

/**
 * 支付流水服务
 *
 * @author su
 */
public interface QrFlowService extends IService<QrFlow> {

	/**
	 * 获取二维码支付单
	 * @return
	 */
	UnifiedOrderResVO unifiedOrder(QrcUnifiedOrderVo qrcUnifiedOrderVo);

	/**
	 * 查询二维码支付结果
	 * @param getUnifiedOrderVo
	 * @return
	 */
	Result<GetUnifiedOrderResBO> queryPayResult(GetUnifiedOrderVo getUnifiedOrderVo);

	/**
	 * 附加处理请求
	 * @param params 附加处理请求参数
	 * @return 处理结果
	 */
	Map<String,String>  qrC2BAddnReceive(Map<String, String> params);


	/**
	 * C2B交易通知——支付结果
	 * @param message C2B交易通知参数
	 * @return 处理结果
	 */
	boolean qrC2BPayNotify(UmsQrcNotifyResult message) throws IOException;

	/**
	 * C2B交易通知——消费冲正交易
	 * @param message C2B交易通知参数
	 * @return 处理结果
	 */
	boolean qrC2BRightingNotify(UmsQrcNotifyResult message);

	/**
	 * C2B交易通知——消费撤销交易
	 * @param message C2B交易通知参数
	 * @return 处理结果
	 */
	boolean qrC2BRevokeNotify(UmsQrcNotifyResult message);
	/**
	 * C2B交易通知——退货交易
	 * @param message C2B交易通知参数
	 * @return 处理结果
	 */
	boolean qrC2BRefundNotify(UmsQrcNotifyResult message);

	/**
	 * 关闭二维码订单
	 * @param closeOrderVO
	 * @return
	 */
    Result closeOrder(CloseOrderVO closeOrderVO);

	/**
	 * 关闭二维码订单
	 * @param closeOrderVO
	 * @return
	 */
    Result closeByOrderId(CloseQrOrderVO closeOrderVO);

    PageInfo<QrFlowQueryResVO> findPageList(QrFlowQueryVo qrFlowQueryVo);

	/**
	 * 流水明细+交易记录查询
	 * @param flowId 流水号
	 * @return
	 */
	QrFlowDetailQueryResVO detail(String flowId);
}
